//////////////////////////////////////////////////////////////////////////
#pragma once
#pragma managed
//////////////////////////////////////////////////////////////////////////
using namespace System;
using namespace System::Runtime::InteropServices;
//////////////////////////////////////////////////////////////////////////
NAMESPACE_BEGIN
//////////////////////////////////////////////////////////////////////////
/// <summary>
/// MatCheckFlag
/// </summary>
[FlagsAttribute]
public enum class MatCheckFlag
{
	/// <summary>
	/// CV_NO_DEPTH_CHECK
	/// </summary>
	NoDepthCheck = CV_NO_DEPTH_CHECK,
	/// <summary>
	/// CV_NO_CN_CHECK
	/// </summary>
	NoChannelCheck = CV_NO_CN_CHECK,
	/// <summary>
	/// CV_NO_SIZE_CHECK
	/// </summary>
	NoSizeCheck = CV_NO_SIZE_CHECK,
};

/// <summary>
/// ArrCmpOption
/// </summary>
public enum class ArrCmpOption
{
	/// <summary>
	/// CV_CMP_EQ
	/// </summary>
	Equal = CV_CMP_EQ,
	/// <summary>
	/// CV_CMP_GT
	/// </summary>
	GreaterThan = CV_CMP_GT,
	/// <summary>
	/// CV_CMP_GE
	/// </summary>
	GreaterEqual = CV_CMP_GE,
	/// <summary>
	/// CV_CMP_LT
	/// </summary>
	LessThan = CV_CMP_LT,
	/// <summary>
	/// CV_CMP_LE
	/// </summary>
	LessEqual = CV_CMP_LE,
	/// <summary>
	/// CV_CMP_NE
	/// </summary>
	NotEqual = CV_CMP_NE,
};

/// <summary>
/// Checks array values for NaNs, Infs or simply for too large numbers
/// (if CV_CHECK_RANGE is set). If CV_CHECK_QUIET is set,
/// no runtime errors is raised (function returns zero value in case of "bad" values).
/// Otherwise cvError is called
/// </summary>
[FlagsAttribute]
public enum class CheckArrFlag
{
	/// <summary>
	/// Default
	/// </summary>
	Default = 0,
	/// <summary>
	/// CV_CHECK_RANGE
	/// </summary>
	Range = CV_CHECK_RANGE,
	/// <summary>
	/// CV_CHECK_QUIET
	/// </summary>
	Quiet = CV_CHECK_QUIET,
};

/// <summary>
/// RandType
/// </summary>
public enum class RandType
{
	/// <summary>
	/// CV_RAND_UNI
	/// </summary>
	Uniform = CV_RAND_UNI,
	/// <summary>
	/// CV_RAND_NORMAL
	/// </summary>
	Normal = CV_RAND_NORMAL,
};

/// <summary>
/// SortFlag
/// </summary>
[FlagsAttribute]
public enum class SortFlag
{
	/// <summary>
	/// Default
	/// </summary>
	Default = 0,
	/// <summary>
	/// CV_SORT_EVERY_ROW
	/// </summary>
	EveryRow = CV_SORT_EVERY_ROW,
	/// <summary>
	/// CV_SORT_EVERY_COLUMN
	/// </summary>
	EveryColumn = CV_SORT_EVERY_COLUMN,
	/// <summary>
	/// CV_SORT_ASCENDING
	/// </summary>
	Ascending = CV_SORT_ASCENDING,
	/// <summary>
	/// CV_SORT_DESCENDING
	/// </summary>
	Descending = CV_SORT_DESCENDING,
};

/// <summary>
/// GEMMOpFlag
/// </summary>
[FlagsAttribute]
public enum class GEMMOpFlag
{
	None = 0,
	/// <summary>
	/// CV_GEMM_A_T
	/// </summary>
	A_T = CV_GEMM_A_T,
	/// <summary>
	/// CV_GEMM_B_T
	/// </summary>
	B_T = CV_GEMM_B_T,
	/// <summary>
	/// CV_GEMM_C_T
	/// </summary>
	C_T = CV_GEMM_C_T,
};

/// <summary>
/// MulTransOrder
/// </summary>
public enum class MulTransOrder
{
	/// <summary>
	/// Front
	/// </summary>
	Left = 1,
	/// <summary>
	/// Back
	/// </summary>
	Right = 0,
};

/// <summary>
/// CompleteSymmOp
/// </summary>
public enum class CompleteSymmOp
{
	/// <summary>
	/// FromLower
	/// </summary>
	FromLower = 0,
	/// <summary>
	/// FromUpper
	/// </summary>
	FromUpper = 1,
};

/// <summary>
/// FlipMode
/// </summary>
public enum class FlipMode
{
	/// <summary>
	/// Horizontal
	/// </summary>
	Horizontal = 0,
	/// <summary>
	/// Vertical
	/// </summary>
	Vertical = 1,
	/// <summary>
	/// Both
	/// </summary>
	Both = -1,
};

/// <summary>
/// SVDFlag
/// </summary>
[FlagsAttribute]
public enum class SVDFlag
{
	/// <summary>
	/// Default
	/// </summary>
	Default = 0,
	/// <summary>
	/// CV_SVD_MODIFY_A
	/// </summary>
	ModifyA = CV_SVD_MODIFY_A,
	/// <summary>
	/// CV_SVD_U_T
	/// </summary>
	UT = CV_SVD_U_T,
	/// <summary>
	/// CV_SVD_V_T
	/// </summary>
	VT = CV_SVD_V_T,
};

/// <summary>
/// MatrixMethod
/// </summary>
public enum class MatrixMethod
{
	/// <summary>
	/// CV_LU
	/// </summary>
	LU = CV_LU,
	/// <summary>
	/// CV_SVD
	/// </summary>
	SVD = CV_SVD,
	/// <summary>
	/// CV_SVD_SYM
	/// </summary>
	SVD_SYM = CV_SVD_SYM,
	/// <summary>
	/// CV_CHOLESKY
	/// </summary>
	CHOLESKY = CV_CHOLESKY,
	/// <summary>
	/// CV_QR
	/// </summary>
	QR = CV_QR,
	/// <summary>
	/// CV_NORMAL
	/// </summary>
	Normal = CV_NORMAL,
};

/// <summary>
/// CovarFlag
/// </summary>
[FlagsAttribute]
public enum class CovarFlag
{
	/// <summary>
	/// transpose([v1-avg, v2-avg,...]) * [v1-avg,v2-avg,...]
	/// </summary>
	Scrambled = CV_COVAR_SCRAMBLED,
	/// <summary>
	/// [v1-avg, v2-avg,...] * transpose([v1-avg,v2-avg,...])
	/// </summary>
	Normal = CV_COVAR_NORMAL,
	/// <summary>
	/// do not calc average (i.e. mean vector) - use the input vector instead
	/// (useful for calculating covariance matrix by parts)
	/// </summary>
	UseAvg = CV_COVAR_USE_AVG,
	/// <summary>
	/// scale the covariance matrix coefficients by number of the vectors
	/// </summary>
	Scale = CV_COVAR_SCALE,
	/// <summary>
	/// all the input vectors are stored in a single matrix, as its rows
	/// </summary>
	Rows = CV_COVAR_ROWS,
	/// <summary>
	/// all the input vectors are stored in a single matrix, as its columns
	/// </summary>
	Cols = CV_COVAR_COLS,
};

/// <summary>
/// CalPCAFlag
/// </summary>
[FlagsAttribute]
public enum class CalPCAFlag
{
	/// <summary>
	/// CV_PCA_DATA_AS_ROW
	/// </summary>
	DataAsRow = CV_PCA_DATA_AS_ROW,
	/// <summary>
	/// CV_PCA_DATA_AS_COL
	/// </summary>
	DataAsCol = CV_PCA_DATA_AS_COL,
	/// <summary>
	/// CV_PCA_USE_AVG
	/// </summary>
	UseAvg = CV_PCA_USE_AVG,
};

/// <summary>
/// types of array norm
/// </summary>
public enum class NormType
{
	/// <summary>
	/// CV_C
	/// </summary>
	C = CV_C,
	/// <summary>
	/// CV_L1
	/// </summary>
	L1 = CV_L1,
	/// <summary>
	/// CV_L2
	/// </summary>
	L2 = CV_L2,
	/// <summary>
	/// CV_NORM_MASK
	/// </summary>
	NormMask = CV_NORM_MASK,
	/// <summary>
	/// CV_RELATIVE
	/// </summary>
	Relative = CV_RELATIVE,
	/// <summary>
	/// CV_DIFF
	/// </summary>
	Diff = CV_DIFF,
	/// <summary>
	/// CV_MINMAX
	/// </summary>
	MinMax = CV_MINMAX,
	/// <summary>
	/// CV_DIFF_C
	/// </summary>
	Diff_C = CV_DIFF_C,
	/// <summary>
	/// CV_DIFF_L1
	/// </summary>
	Diff_L1 = CV_DIFF_L1,
	/// <summary>
	/// CV_DIFF_L2
	/// </summary>
	Diff_L2 = CV_DIFF_L2,
	/// <summary>
	/// CV_RELATIVE_C
	/// </summary>
	Relative_C = CV_RELATIVE_C,
	/// <summary>
	/// CV_RELATIVE_L1
	/// </summary>
	Relative_L1 = CV_RELATIVE_L1,
	/// <summary>
	/// CV_RELATIVE_L2
	/// </summary>
	Relative_L2 = CV_RELATIVE_L2,
};

/// <summary>
/// ReduceType
/// </summary>
public enum class ReduceType
{
	/// <summary>
	/// CV_REDUCE_SUM
	/// </summary>
	Sum = CV_REDUCE_SUM,
	/// <summary>
	/// CV_REDUCE_AVG
	/// </summary>
	Avg = CV_REDUCE_AVG,
	/// <summary>
	/// CV_REDUCE_MAX
	/// </summary>
	Max = CV_REDUCE_MAX,
	/// <summary>
	/// CV_REDUCE_MIN
	/// </summary>
	Min = CV_REDUCE_MIN,
};

/// <summary>
/// DxtFlag
/// </summary>
[FlagsAttribute]
public enum class DxtFlag
{
	/// <summary>
	/// CV_DXT_FORWARD
	/// </summary>
	Forward = CV_DXT_FORWARD,
	/// <summary>
	/// CV_DXT_INVERSE
	/// </summary>
	Inverse = CV_DXT_INVERSE,
	/// <summary>
	/// divide result by size of array
	/// CV_DXT_SCALE
	/// </summary>
	Scale = CV_DXT_SCALE,
	/// <summary>
	/// divide result by size of array
	/// CV_DXT_INV_SCALE
	/// </summary>
	InvScale = CV_DXT_INV_SCALE,
	/// <summary>
	/// CV_DXT_INVERSE_SCALE
	/// </summary>
	InverseScale = CV_DXT_INVERSE_SCALE,
	/// <summary>
	/// transform each row individually
	/// CV_DXT_ROWS
	/// </summary>
	Rows = CV_DXT_ROWS,
	/// <summary>
	/// conjugate the second argument of cvMulSpectrums
	/// CV_DXT_MUL_CONJ
	/// </summary>
	MulConj = CV_DXT_MUL_CONJ,
};

/// <summary>
/// GraphSearchFlag
/// </summary>
[FlagsAttribute]
public enum class GraphSearchFlag
{
	/// <summary>
	/// CV_GRAPH_VERTEX
	/// </summary>
	Vertex = CV_GRAPH_VERTEX,
	/// <summary>
	/// CV_GRAPH_TREE_EDGE
	/// </summary>
	TreeEdge = CV_GRAPH_TREE_EDGE,
	/// <summary>
	/// CV_GRAPH_BACK_EDGE
	/// </summary>
	BackEdge = CV_GRAPH_BACK_EDGE,
	/// <summary>
	/// CV_GRAPH_FORWARD_EDGE
	/// </summary>
	ForwardEdge = CV_GRAPH_FORWARD_EDGE,
	/// <summary>
	/// CV_GRAPH_CROSS_EDGE
	/// </summary>
	CrossEdge = CV_GRAPH_CROSS_EDGE,
	/// <summary>
	/// CV_GRAPH_ANY_EDGE
	/// </summary>
	AnyEdge = CV_GRAPH_ANY_EDGE,
	/// <summary>
	/// CV_GRAPH_NEW_TREE
	/// </summary>
	NewTree = CV_GRAPH_NEW_TREE,
	/// <summary>
	/// CV_GRAPH_BACKTRACKING
	/// </summary>
	BackTracking = CV_GRAPH_BACKTRACKING,
	/// <summary>
	/// CV_GRAPH_OVER
	/// </summary>
	Over = CV_GRAPH_OVER,
	/// <summary>
	/// CV_GRAPH_ALL_ITEMS
	/// </summary>
	ALLItems = CV_GRAPH_ALL_ITEMS,
	/// <summary>
	/// CV_GRAPH_ITEM_VISITED_FLAG
	/// </summary>
	ItemVisited_Flag = CV_GRAPH_ITEM_VISITED_FLAG,
	/// <summary>
	/// CV_GRAPH_SEARCH_TREE_NODE_FLAG
	/// </summary>
	SearchTreeNodeFlag = CV_GRAPH_SEARCH_TREE_NODE_FLAG,
	/// <summary>
	/// CV_GRAPH_FORWARD_EDGE_FLAG
	/// </summary>
	ForwardEdgeFlag = CV_GRAPH_FORWARD_EDGE_FLAG,
};

/// <summary>
/// PixelConnectType
/// </summary>
public enum class PixelConnectType
{
	/// <summary>
	/// 4 - Connected
	/// </summary>
	Connected4 = 4,
	/// <summary>
	/// 8 - Connected
	/// </summary>
	Connected8 = 8,
};

/// <summary>
/// LineTypeFlag
/// </summary>
[FlagsAttribute]
public enum class LineTypeFlag
{
	/// <summary>
	/// 4 - Connected
	/// </summary>
	Connected4 = 4,
	/// <summary>
	/// 8 - Connected
	/// </summary>
	Connected8 = 8,
	/// <summary>
	/// CV_FILLED
	/// </summary>
	Filled = CV_FILLED,
	/// <summary>
	/// CV_AA
	/// </summary>
	AA = CV_AA,
};

/// <summary>
/// FontFlag
/// </summary>
[FlagsAttribute]
public enum class FontFlag
{
	/// <summary>
	/// CV_FONT_HERSHEY_SIMPLEX
	/// </summary>
	HersheySimplex = CV_FONT_HERSHEY_SIMPLEX,
	/// <summary>
	/// CV_FONT_HERSHEY_SIMPLEX
	/// </summary>
	HersheyPlain = CV_FONT_HERSHEY_PLAIN,
	/// <summary>
	/// CV_FONT_HERSHEY_SIMPLEX
	/// </summary>
	HersheyDuplex = CV_FONT_HERSHEY_DUPLEX,
	/// <summary>
	/// CV_FONT_HERSHEY_SIMPLEX
	/// </summary>
	HersheyComplex = CV_FONT_HERSHEY_COMPLEX,
	/// <summary>
	/// CV_FONT_HERSHEY_SIMPLEX
	/// </summary>
	HersheyTriplex = CV_FONT_HERSHEY_TRIPLEX,
	/// <summary>
	/// CV_FONT_HERSHEY_SIMPLEX
	/// </summary>
	HersheyComplexSmall = CV_FONT_HERSHEY_COMPLEX_SMALL,
	/// <summary>
	/// CV_FONT_HERSHEY_SIMPLEX
	/// </summary>
	HersheyScriptSimplex = CV_FONT_HERSHEY_SCRIPT_SIMPLEX,
	/// <summary>
	/// CV_FONT_HERSHEY_SIMPLEX
	/// </summary>
	HersheyScriptComplex = CV_FONT_HERSHEY_SCRIPT_COMPLEX,
	/// <summary>
	/// CV_FONT_HERSHEY_SIMPLEX
	/// </summary>
	Italic = CV_FONT_ITALIC,
	/// <summary>
	/// CV_FONT_HERSHEY_SIMPLEX
	/// </summary>
	Vector0 = CV_FONT_VECTOR0,
};

/// <summary>
/// KMeansFlag
/// </summary>
[FlagsAttribute]
public enum class KMeansFlag
{
	/// <summary>
	/// Default
	/// </summary>
	Default = 0,
	/// <summary>
	/// CV_KMEANS_USE_INITIAL_LABELS
	/// </summary>
	UseInitialLabels = CV_KMEANS_USE_INITIAL_LABELS,
};

/// <summary>
/// KMeansFlag
/// </summary>
[FlagsAttribute]
public enum class ErrorMode
{
	/// <summary>
	/// Print error and exit program
	/// </summary>
	Leaf = CV_ErrModeLeaf,
	/// <summary>
	/// Print error and continue
	/// </summary>
	Parent = CV_ErrModeParent,
	/// <summary>
	/// Don't print and continue
	/// </summary>
	Silent = CV_ErrModeSilent,
};

//////////////////////////////////////////////////////////////////////////
NAMESPACE_END
//////////////////////////////////////////////////////////////////////////